{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "14c6b79e",
   "metadata": {},
   "source": [
    "# Day 8：综合实践与展示（闭环）\n",
    "\n",
    "> 今日目标：完成 1 个最小可复现分析项目（6~8 关键单元格），展示数据分析闭环：选题 → 数据 → 清洗 → 探索/可视化 → (可选) 简易模型 → 结论与局限 → 伦理声明。\n",
    "\n",
    "核心要求：\n",
    "- 步骤清晰，Notebook 自上而下可一键运行。\n",
    "- 每个阶段有简短 Markdown 说明。\n",
    "- 至少 1 张图 + 1 张汇总表。\n",
    "- 结论客观，注明局限与后续改进。\n",
    "\n",
    "可选加分：\n",
    "- 自定义函数封装重复逻辑。\n",
    "- 使用前几天拓展 (相关性 / 简单回归 / 分组多指标)。\n",
    "- 图表添加注释 (annotate) 或信息来源。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0f297fb1",
   "metadata": {},
   "source": [
    "## 1. 选题建议（任选其一或自拟）\n",
    "1. 城市空气质量：比较不同区域 PM2.5 指标差异与可能影响因素。\n",
    "2. 学习打卡：一周（或多周）学习时长/类型分布，寻找效率模式。\n",
    "3. 简化公共数据：例如你自行整理的体育锻炼 / 食堂满意度抽样。\n",
    "4. (可选) 在已有空气质量上加入你自建的标签（如工作日/周末）。\n",
    "\n",
    "提示：小而完整 > 大而空泛。数据行数几十到几百即可。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "14eac62a",
   "metadata": {},
   "source": [
    "## 2. 项目结构模板（复制后逐步填）\n",
    "1. 题目 & 摘要 (50~70 字说明做了什么 + 发现概括)\n",
    "2. 数据来源 & 字段说明 (表格/列表)\n",
    "3. 清洗步骤 (列出 2~4 条具体操作：去重/缺失处理/类型转换)\n",
    "4. 探索分析：关键统计 & 排序 & (可选) 相关\n",
    "5. 可视化：1~2 张核心图（趋势/比较/关系）\n",
    "6. (可选) 简易模型或假设验证\n",
    "7. 结论（3~5 条发现 + 局限 + 改进方向）\n",
    "8. 数据伦理与责任（1~2 句）\n",
    "9. 附录（函数 / 额外图表，可选）"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ac602f75",
   "metadata": {},
   "source": [
    "## 3. 起步：导入基础库\n",
    "如需第三方库（除 pandas / matplotlib / sklearn），请提前说明。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "7913efbf",
   "metadata": {},
   "outputs": [],
   "source": [
    "# === 1. 导入库 ===\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "# (可选) from sklearn.linear_model import LinearRegression\n",
    "# (可选) from sklearn.model_selection import train_test_split\n",
    "# 设置显示选项\n",
    "pd.set_option('display.max_columns', 20)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "06c7b39d",
   "metadata": {},
   "source": [
    "## 4. 题目 & 摘要 (示例占位)\n",
    "在这里写：本项目分析 XXX 数据，关注的问题是…… 预期输出…… 初步发现……"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "86558a2d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "air 行列: (30, 7)  city_info 行列: (12, 5)\n"
     ]
    },
    {
     "data": {
      "application/vnd.microsoft.datawrangler.viewer.v0+json": {
       "columns": [
        {
         "name": "index",
         "rawType": "int64",
         "type": "integer"
        },
        {
         "name": "date",
         "rawType": "datetime64[ns]",
         "type": "datetime"
        },
        {
         "name": "city",
         "rawType": "object",
         "type": "string"
        },
        {
         "name": "province",
         "rawType": "object",
         "type": "string"
        },
        {
         "name": "PM25",
         "rawType": "int64",
         "type": "integer"
        },
        {
         "name": "PM10",
         "rawType": "int64",
         "type": "integer"
        },
        {
         "name": "NO2",
         "rawType": "int64",
         "type": "integer"
        },
        {
         "name": "SO2",
         "rawType": "int64",
         "type": "integer"
        }
       ],
       "ref": "2171e383-c0ca-473a-ae65-2738df2fdd62",
       "rows": [
        [
         "0",
         "2025-09-01 00:00:00",
         "广州",
         "广东",
         "42",
         "55",
         "19",
         "7"
        ],
        [
         "1",
         "2025-09-02 00:00:00",
         "广州",
         "广东",
         "41",
         "54",
         "18",
         "7"
        ],
        [
         "2",
         "2025-09-03 00:00:00",
         "广州",
         "广东",
         "39",
         "50",
         "17",
         "6"
        ],
        [
         "3",
         "2025-09-04 00:00:00",
         "广州",
         "广东",
         "45",
         "57",
         "20",
         "7"
        ],
        [
         "4",
         "2025-09-05 00:00:00",
         "广州",
         "广东",
         "44",
         "56",
         "19",
         "7"
        ]
       ],
       "shape": {
        "columns": 7,
        "rows": 5
       }
      },
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>city</th>\n",
       "      <th>province</th>\n",
       "      <th>PM25</th>\n",
       "      <th>PM10</th>\n",
       "      <th>NO2</th>\n",
       "      <th>SO2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2025-09-01</td>\n",
       "      <td>广州</td>\n",
       "      <td>广东</td>\n",
       "      <td>42</td>\n",
       "      <td>55</td>\n",
       "      <td>19</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2025-09-02</td>\n",
       "      <td>广州</td>\n",
       "      <td>广东</td>\n",
       "      <td>41</td>\n",
       "      <td>54</td>\n",
       "      <td>18</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2025-09-03</td>\n",
       "      <td>广州</td>\n",
       "      <td>广东</td>\n",
       "      <td>39</td>\n",
       "      <td>50</td>\n",
       "      <td>17</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2025-09-04</td>\n",
       "      <td>广州</td>\n",
       "      <td>广东</td>\n",
       "      <td>45</td>\n",
       "      <td>57</td>\n",
       "      <td>20</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2025-09-05</td>\n",
       "      <td>广州</td>\n",
       "      <td>广东</td>\n",
       "      <td>44</td>\n",
       "      <td>56</td>\n",
       "      <td>19</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        date city province  PM25  PM10  NO2  SO2\n",
       "0 2025-09-01   广州       广东    42    55   19    7\n",
       "1 2025-09-02   广州       广东    41    54   18    7\n",
       "2 2025-09-03   广州       广东    39    50   17    6\n",
       "3 2025-09-04   广州       广东    45    57   20    7\n",
       "4 2025-09-05   广州       广东    44    56   19    7"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# === 2. 载入数据 (示例使用课程内空气质量 + 城市信息，可替换成你自己的) ===\n",
    "# 如果你有自建 CSV，把路径改成你的文件\n",
    "air = pd.read_csv('../data/air_quality_timeseries.csv', parse_dates=['date'])\n",
    "city_info = pd.read_csv('../data/city_info.csv')\n",
    "print('air 行列:', air.shape, ' city_info 行列:', city_info.shape)\n",
    "air.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ecda9b34",
   "metadata": {},
   "source": [
    "### 字段说明 (请自行补充/修改)\n",
    "| 字段 | 含义 | 单位/类型 |\n",
    "|------|------|-----------|\n",
    "| date | 日期 | datetime |\n",
    "| city | 城市名称 | str |\n",
    "| PM25 | PM2.5 浓度 | μg/m³ |\n",
    "| PM10 | PM10 浓度 | μg/m³ |\n",
    "| NO2 | 二氧化氮 | μg/m³ |\n",
    "| SO2 | 二氧化硫 | μg/m³ |\n",
    "| population_million | 人口 (百万) | float |\n",
    "| region | 区域 | str |\n",
    "(如有新增列请补充)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "afd4d937",
   "metadata": {},
   "source": [
    "## 5. 清洗步骤 (示例：去重/缺失/类型)\n",
    "列出你做的每一步 + 一行代码 + 一句说明。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "ec1f4fcf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.microsoft.datawrangler.viewer.v0+json": {
       "columns": [
        {
         "name": "index",
         "rawType": "object",
         "type": "string"
        },
        {
         "name": "0",
         "rawType": "int64",
         "type": "integer"
        }
       ],
       "ref": "d74929ef-3326-492e-800e-d193a43ba140",
       "rows": [],
       "shape": {
        "columns": 1,
        "rows": 0
       }
      },
      "text/plain": [
       "Series([], dtype: int64)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# === 3. 数据清洗示例 ===\n",
    "# 合并城市信息\n",
    "df = pd.merge(air, city_info, on='city', how='left')\n",
    "# 检查缺失\n",
    "missing_summary = df.isnull().sum()\n",
    "missing_summary[missing_summary>0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "ab7c4fe9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 示例：如果没有缺失，可以写说明；若有，展示处理代码 (此处占位)\n",
    "# df['某列'] = df['某列'].fillna(df['某列'].mean())  # 示例\n",
    "# 去重 (若有重复)\n",
    "dup_count = df.duplicated().sum()\n",
    "dup_count"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dd7f932e",
   "metadata": {},
   "source": [
    "## 6. 衍生指标 (根据选题自定)\n",
    "示例：人均 PM2.5 / PM10-PM25 差值 / 高污染天 flag。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "7d1e0147",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.microsoft.datawrangler.viewer.v0+json": {
       "columns": [
        {
         "name": "index",
         "rawType": "int64",
         "type": "integer"
        },
        {
         "name": "date",
         "rawType": "datetime64[ns]",
         "type": "datetime"
        },
        {
         "name": "city",
         "rawType": "object",
         "type": "string"
        },
        {
         "name": "province_x",
         "rawType": "object",
         "type": "string"
        },
        {
         "name": "PM25",
         "rawType": "int64",
         "type": "integer"
        },
        {
         "name": "PM10",
         "rawType": "int64",
         "type": "integer"
        },
        {
         "name": "NO2",
         "rawType": "int64",
         "type": "integer"
        },
        {
         "name": "SO2",
         "rawType": "int64",
         "type": "integer"
        },
        {
         "name": "province_y",
         "rawType": "object",
         "type": "string"
        },
        {
         "name": "region",
         "rawType": "object",
         "type": "string"
        },
        {
         "name": "population_million",
         "rawType": "float64",
         "type": "float"
        },
        {
         "name": "area_km2",
         "rawType": "int64",
         "type": "integer"
        },
        {
         "name": "PM_diff",
         "rawType": "int64",
         "type": "integer"
        },
        {
         "name": "PM25_per_million",
         "rawType": "float64",
         "type": "float"
        },
        {
         "name": "high_flag",
         "rawType": "int64",
         "type": "integer"
        }
       ],
       "ref": "baf231a9-31a7-4e99-91f0-27ec82ca3e72",
       "rows": [
        [
         "0",
         "2025-09-01 00:00:00",
         "广州",
         "广东",
         "42",
         "55",
         "19",
         "7",
         "广东",
         "华南",
         "18.7",
         "7434",
         "13",
         "2.2459893048128343",
         "0"
        ],
        [
         "1",
         "2025-09-02 00:00:00",
         "广州",
         "广东",
         "41",
         "54",
         "18",
         "7",
         "广东",
         "华南",
         "18.7",
         "7434",
         "13",
         "2.192513368983957",
         "0"
        ],
        [
         "2",
         "2025-09-03 00:00:00",
         "广州",
         "广东",
         "39",
         "50",
         "17",
         "6",
         "广东",
         "华南",
         "18.7",
         "7434",
         "11",
         "2.085561497326203",
         "0"
        ],
        [
         "3",
         "2025-09-04 00:00:00",
         "广州",
         "广东",
         "45",
         "57",
         "20",
         "7",
         "广东",
         "华南",
         "18.7",
         "7434",
         "12",
         "2.4064171122994655",
         "0"
        ],
        [
         "4",
         "2025-09-05 00:00:00",
         "广州",
         "广东",
         "44",
         "56",
         "19",
         "7",
         "广东",
         "华南",
         "18.7",
         "7434",
         "12",
         "2.3529411764705883",
         "0"
        ]
       ],
       "shape": {
        "columns": 14,
        "rows": 5
       }
      },
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>city</th>\n",
       "      <th>province_x</th>\n",
       "      <th>PM25</th>\n",
       "      <th>PM10</th>\n",
       "      <th>NO2</th>\n",
       "      <th>SO2</th>\n",
       "      <th>province_y</th>\n",
       "      <th>region</th>\n",
       "      <th>population_million</th>\n",
       "      <th>area_km2</th>\n",
       "      <th>PM_diff</th>\n",
       "      <th>PM25_per_million</th>\n",
       "      <th>high_flag</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2025-09-01</td>\n",
       "      <td>广州</td>\n",
       "      <td>广东</td>\n",
       "      <td>42</td>\n",
       "      <td>55</td>\n",
       "      <td>19</td>\n",
       "      <td>7</td>\n",
       "      <td>广东</td>\n",
       "      <td>华南</td>\n",
       "      <td>18.7</td>\n",
       "      <td>7434</td>\n",
       "      <td>13</td>\n",
       "      <td>2.245989</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2025-09-02</td>\n",
       "      <td>广州</td>\n",
       "      <td>广东</td>\n",
       "      <td>41</td>\n",
       "      <td>54</td>\n",
       "      <td>18</td>\n",
       "      <td>7</td>\n",
       "      <td>广东</td>\n",
       "      <td>华南</td>\n",
       "      <td>18.7</td>\n",
       "      <td>7434</td>\n",
       "      <td>13</td>\n",
       "      <td>2.192513</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2025-09-03</td>\n",
       "      <td>广州</td>\n",
       "      <td>广东</td>\n",
       "      <td>39</td>\n",
       "      <td>50</td>\n",
       "      <td>17</td>\n",
       "      <td>6</td>\n",
       "      <td>广东</td>\n",
       "      <td>华南</td>\n",
       "      <td>18.7</td>\n",
       "      <td>7434</td>\n",
       "      <td>11</td>\n",
       "      <td>2.085561</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2025-09-04</td>\n",
       "      <td>广州</td>\n",
       "      <td>广东</td>\n",
       "      <td>45</td>\n",
       "      <td>57</td>\n",
       "      <td>20</td>\n",
       "      <td>7</td>\n",
       "      <td>广东</td>\n",
       "      <td>华南</td>\n",
       "      <td>18.7</td>\n",
       "      <td>7434</td>\n",
       "      <td>12</td>\n",
       "      <td>2.406417</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2025-09-05</td>\n",
       "      <td>广州</td>\n",
       "      <td>广东</td>\n",
       "      <td>44</td>\n",
       "      <td>56</td>\n",
       "      <td>19</td>\n",
       "      <td>7</td>\n",
       "      <td>广东</td>\n",
       "      <td>华南</td>\n",
       "      <td>18.7</td>\n",
       "      <td>7434</td>\n",
       "      <td>12</td>\n",
       "      <td>2.352941</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        date city province_x  PM25  PM10  NO2  SO2 province_y region  \\\n",
       "0 2025-09-01   广州         广东    42    55   19    7         广东     华南   \n",
       "1 2025-09-02   广州         广东    41    54   18    7         广东     华南   \n",
       "2 2025-09-03   广州         广东    39    50   17    6         广东     华南   \n",
       "3 2025-09-04   广州         广东    45    57   20    7         广东     华南   \n",
       "4 2025-09-05   广州         广东    44    56   19    7         广东     华南   \n",
       "\n",
       "   population_million  area_km2  PM_diff  PM25_per_million  high_flag  \n",
       "0                18.7      7434       13          2.245989          0  \n",
       "1                18.7      7434       13          2.192513          0  \n",
       "2                18.7      7434       11          2.085561          0  \n",
       "3                18.7      7434       12          2.406417          0  \n",
       "4                18.7      7434       12          2.352941          0  "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# === 4. 衍生字段示例 ===\n",
    "df['PM_diff'] = df['PM10'] - df['PM25']\n",
    "df['PM25_per_million'] = df['PM25'] / df['population_million']\n",
    "df['high_flag'] = (df['PM25'] > 55).astype(int)\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "645bbf8f",
   "metadata": {},
   "source": [
    "## 7. 探索性分析 (统计/排序/分组)\n",
    "请围绕你的问题：示例——比较区域平均、城市排名、差值分布。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "571d72a2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.microsoft.datawrangler.viewer.v0+json": {
       "columns": [
        {
         "name": "region",
         "rawType": "object",
         "type": "string"
        },
        {
         "name": "PM25",
         "rawType": "float64",
         "type": "float"
        }
       ],
       "ref": "a742fe2c-c277-45e2-ab80-0077fc592d7f",
       "rows": [
        [
         "华北",
         "62.2"
        ],
        [
         "西南",
         "57.3"
        ],
        [
         "华南",
         "42.2"
        ],
        [
         "华东",
         "42.0"
        ]
       ],
       "shape": {
        "columns": 1,
        "rows": 4
       }
      },
      "text/plain": [
       "region\n",
       "华北    62.2\n",
       "西南    57.3\n",
       "华南    42.2\n",
       "华东    42.0\n",
       "Name: PM25, dtype: float64"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# === 5. 统计示例 ===\n",
    "region_stats = df.groupby('region')['PM25'].mean().sort_values(ascending=False)\n",
    "region_stats"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "931d10a0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.microsoft.datawrangler.viewer.v0+json": {
       "columns": [
        {
         "name": "city",
         "rawType": "object",
         "type": "string"
        },
        {
         "name": "PM25",
         "rawType": "float64",
         "type": "float"
        }
       ],
       "ref": "00f1f025-a59d-454b-80ca-5a3c2488c054",
       "rows": [
        [
         "北京",
         "62.2"
        ],
        [
         "成都",
         "59.2"
        ],
        [
         "重庆",
         "55.4"
        ],
        [
         "上海",
         "45.0"
        ],
        [
         "广州",
         "42.2"
        ],
        [
         "杭州",
         "39.0"
        ]
       ],
       "shape": {
        "columns": 1,
        "rows": 6
       }
      },
      "text/plain": [
       "city\n",
       "北京    62.2\n",
       "成都    59.2\n",
       "重庆    55.4\n",
       "上海    45.0\n",
       "广州    42.2\n",
       "杭州    39.0\n",
       "Name: PM25, dtype: float64"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 城市层面示例\n",
    "city_pm25 = df.groupby('city')['PM25'].mean().sort_values(ascending=False).head(10)\n",
    "city_pm25"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e70ba5f",
   "metadata": {},
   "source": [
    "### (可选) 相关性\n",
    "若与你的选题相关，可计算相关矩阵并挑 1~2 个值得解释的关系。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "26762248",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.microsoft.datawrangler.viewer.v0+json": {
       "columns": [
        {
         "name": "index",
         "rawType": "object",
         "type": "string"
        },
        {
         "name": "PM25",
         "rawType": "float64",
         "type": "float"
        },
        {
         "name": "PM10",
         "rawType": "float64",
         "type": "float"
        },
        {
         "name": "NO2",
         "rawType": "float64",
         "type": "float"
        },
        {
         "name": "SO2",
         "rawType": "float64",
         "type": "float"
        }
       ],
       "ref": "13a9bdf2-393a-4276-8176-bc1b6b5348d9",
       "rows": [
        [
         "PM25",
         "1.0",
         "0.9935886606019285",
         "0.9204083593913701",
         "0.9282190080647906"
        ],
        [
         "PM10",
         "0.9935886606019285",
         "1.0",
         "0.9518575637806216",
         "0.9449095821680138"
        ],
        [
         "NO2",
         "0.9204083593913701",
         "0.9518575637806216",
         "1.0",
         "0.9592134871163112"
        ],
        [
         "SO2",
         "0.9282190080647906",
         "0.9449095821680138",
         "0.9592134871163112",
         "1.0"
        ]
       ],
       "shape": {
        "columns": 4,
        "rows": 4
       }
      },
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PM25</th>\n",
       "      <th>PM10</th>\n",
       "      <th>NO2</th>\n",
       "      <th>SO2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>PM25</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.993589</td>\n",
       "      <td>0.920408</td>\n",
       "      <td>0.928219</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>PM10</th>\n",
       "      <td>0.993589</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.951858</td>\n",
       "      <td>0.944910</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>NO2</th>\n",
       "      <td>0.920408</td>\n",
       "      <td>0.951858</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.959213</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SO2</th>\n",
       "      <td>0.928219</td>\n",
       "      <td>0.944910</td>\n",
       "      <td>0.959213</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          PM25      PM10       NO2       SO2\n",
       "PM25  1.000000  0.993589  0.920408  0.928219\n",
       "PM10  0.993589  1.000000  0.951858  0.944910\n",
       "NO2   0.920408  0.951858  1.000000  0.959213\n",
       "SO2   0.928219  0.944910  0.959213  1.000000"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "corr = df[['PM25','PM10','NO2','SO2']].corr()\n",
    "corr"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8085d4d6",
   "metadata": {},
   "source": [
    "## 8. 可视化 (核心 1~2 张图)\n",
    "挑最能支撑你结论的图。保持整洁：标题 / 轴标签 / 单位 / 图例。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "cd690642",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk4AAAGGCAYAAACNCg6xAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA6bElEQVR4nO3dfXzO9f////uxyYZssy0xVsg5y1lRUbRymiKZfJG3kvQmvUXFShnRvIuIluqd5Kx3eEtRzpOzIqdjiCQyJ8N22GYnDtuO1+8Pv70+HW14bW2Ow9yul8txuex4vk6Ox7HXju2+5+v5er5shmEYAgAAwFV5ubsAAACA6wXBCQAAwCKCEwAAgEUEJwAAAIsITgAAABYRnAAAACwiOAEAAFhEcAIAALCI4AS4wQcffKAzZ864uwwXhmHI4XC4u4wbQmZmprtLKDZ//PGHu0sAihXBCbjG1qxZo3nz5ik9Pd2lfc+ePZfdJi0tTdu2bbO0/1mzZmn8+PH5Luvatat27tyZ77Ls7GxVr15dBw8e1JEjRyy9VkmVnJwsp9N51fUyMzPVoUOHy35PBwwYoDlz5ri0paamqkaNGjp+/HiR1PpnWVlZ+vHHHwu83Y4dOzR37tzLLj948KA6dOig1NTUPMvmzp2rP9+AolmzZub3Y8uWLcrJySlwPYAnK+XuAoAbzfjx45WSkqKnn37abMvKytKWLVu0atUqPfTQQ3m2KV26tB566CE1bdr0qvs/f/68nE6nnnrqKd12220uy/744w81btw43+1uuukmValSRXXq1NHQoUPVtWtXtWnTpkDvraR47733tGbNGpUuXdqlfefOnfkeg5kzZ+bbnpqaqrvvvtulbdOmTerRo4eqVq1apDUnJiZq8uTJGjFihEv73Llz9eGHH+Z5L3+2d+9enTt3TmFhYWrUqFGe5Zs3b1ZYWJieffZZl57S9PR0bd++XaVLl1aPHj0kSVWqVDG/F7Vr19bo0aP1yiuvyN/fvyjeJuB+BoBrZtGiRUZ4eLjx+++/u7QPHTrUWLBgwRW3bdGixd9+/avto3Xr1oZhGMbvv/9ufPnll8aHH374t1/zeuVwOPK0/fX7d+zYMSM7O/uy+3jyySeNI0eOuLQNGjQoz/F3Op3GtGnTjKysrELVmpmZafTr189IS0vLsywrK8vIyMgo1H5zPfnkk8bRo0eN5ORk4+LFi0bjxo1dlv/5df/6PUpOTjb69+9vXLx48W/VAHgKepyAa+TYsWNasGCBVq5cqXfffVeRkZGSLp1a8/LyUkRExN/a/6xZs3Tq1Cm9+uqr8vK6/Fn4jIwMnTt3Tp07d87TC7B3716zl+n8+fMyDEPPPPOMfHx8rvjaqampeuONNzRv3jy99tprKl++vJKSknTgwAE988wzaty4sd544w198cUXOn36tFnf999/r4iICM2bN08dO3aU3W7XrFmzVKpUKTkcDh09elRdu3bVww8/bPn70LNnTx04cMCl7c0331S3bt0s70OSjh49qvXr12vAgAGXXadfv37q2LGjXn75ZUv7vHDhgjZu3Kh9+/blWbZz506VKVNG/fv3L1CdkjRmzBgNHDhQ5cqVy7OsVKlSKlWq8L/q09PTVbp0ad1+++2SLv2M3HPPPS7rTJo0SX/88YdmzJiRZ3t/f3/16dNH7777rl577bVC1wF4DHcnN+BGkJKSYgwYMMBISUkxDMMw9u7da7z33nvG+vXrjccee+yKvRa5cv+TP3funLFr1y6XZdnZ2Ub16tWNN99808jJyXFZ5nA4jClTphizZ8827rjjDiMiIsLo1auXSw/AmTNnDMO41LPgdDoL9R4PHz5stG/f3qXtwoULxt13323Y7Xbj8OHDRqNGjYxt27aZy2NiYox27doZhnGp16VLly4uPT3Z2dnGo48+auzYscNyHatXry5U/fn59NNPjYkTJ5rP/9ybsm/fPqNHjx55tsnMzDQuXLhgGMb/9Tj9+9//NlavXm3MmDHDWLNmTb6vde+99xaqxtTU1EJv+1cffvihceDAAZe2OXPmGIMHDzZ/XiZPnmwsWbLEMAzD+Oijj4w9e/YY7777rvHFF18YhnH5Xs0WLVqY3xfgekaPE1DMkpOTNXXqVE2cOFF+fn6SpAYNGmjlypV6+umntXPnTnl7e1veX0BAgI4fP64NGzZo8ODB8vb21rx589SgQQONGTMmz/qlS5fWv/71L0lSTEyMFixYIEmKjIzUpk2b5O3trdjYWO3fv19ly5ZVSkqKAgICFBERoaeeekqPPfaYpbry6+Xy8fGRv7+/UlNT5eXlpbZt22rVqlW66667JEk2m002m02SdPr0aa1atUo33XSTub23t7f69eunRYsWWRrfVdT69eun2rVrKyIiIs94sZiYGE2bNi3PNocPH1bv3r0VEBCg/fv3q2fPnvL19dWpU6dUrlw5PfPMM1q7dq3Cw8OLpMaVK1eqQ4cOedqnTp2q+fPnu3w/ryQnJ0c//fSTqlWrpsOHD5vtM2bM0O23327+jC5ZskROp1OTJk3Snj171KpVK4WHh5vH8XLatGmjtWvXqmPHjgV4d4Dn4ao6oJidOnVKr7/+uhmaJGn79u3asGGDJkyYoOeee047duwo0D47d+6stm3bqn///vr99981depUffbZZwXah2EYeuutt7Ru3TrVrVtXISEh8vPzU2JiorKzsxUXF6f27dsXaJ9/lpOToxkzZigkJMQ8zdOuXTutXr1a0qXBzLfccou5fqVKlbR///48f4D37t2b74Dla8Hb21udOnXKU9OyZcvUpUsXVaxYMc82DRo0UGxsrNatW6fw8HB9+eWXWrdunZo0aaLnn39e0qXvzRNPPFEk0z/s2LFDtWvXztM+cOBArVmzRuvWrcvzqFatmj766COXto0bNyonJ8clNO3cuVMhISGqW7euvLy8dOzYMdWsWdPcpnLlyvmenstP7dq1C/xzDngiepyAYlavXj2X5zNmzND+/fs1f/58+fj46IEHHtALL7yghIQEdenSRW3atFGdOnVUvnz5q+53/PjxeuCBBzR48GCXEFJYt9xyi06fPq0//vhDnTt3vurYpr86ceKEPv/8c2VmZio9PV0NGjTQ559/bi6vXr26zpw5o/T0dO3cuVNNmjRx2b5atWouzxctWqQLFy6YV2xZcfbsWU2YMEHHjh1TQkKC2rRpo0GDBlke55OcnCw/Pz+zB23q1Kl5glPt2rVVs2ZNSZLT6dTTTz+tzp07X3GcWvPmzc0r6dq2basPP/xQK1asUJcuXSTJ5ZL+gkhMTFTlypXztP/12P38889q0aJFgfa9YcMGRUREmGPGZs6cqVtvvVU5OTlyOBzy8vKy/HMXEhKi2NjYAr0+4IkITsA1sn//fk2dOlWPP/64ywDgW2+9VQsXLtTXX3+tFStWaNy4cUpNTdXkyZPNU2yXc+DAAfXo0UPz5s1Tw4YN1a5du79VY5UqVXTs2DFt2LBBAwcOLNT2/fr1u+I6rVu31rp16+Tl5XXZU5QXLlzQxIkTVa9ePb399tsFquHuu+9Wjx495O3trQsXLigyMlIvvPCCPvroI0vbx8TE6Ntvv803NO7fv/+yUzTMmjVL3bt3v+wpq7p167o8HzNmjKpUqWI+L2xwqlChgjIyMq64zs8//6zu3bvr559/VkhIiMuy2bNnq3Xr1mavYK5Dhw4pIiLCnD/swoULKlOmjMqWLas33nhDbdu2VevWrSXJ8pxXAQEBBXhngGciOAHFKCcnR6tXr9ahQ4dUo0YNZWVl6e2331Z0dHSedXfs2KE333xTp0+f1qFDh9SwYcMr7vvkyZNasWKF3n33XQ0cOFD333+/FixYoHvvvfeqdSUmJkqShg4dqoCAAPN5rVq1tGDBAv3222+Xne/p78od55TfuBxJ+v333zVv3jwNGjRIQUFBBd5/bk+QJPn6+uq9995TzZo1lZGRobJly151+9dff12vv/56vsvuuecerVu3rsA1SVJcXJxCQkIUFBQkp9Op5ORkffPNNwoJCdEzzzxzxSshr6RatWo6efLkZZcbhqHXX39dS5cuzROaJKl37956+eWX1b59e5djUqtWLUkyg9OSJUs0cOBA/fHHH5o+fbqWL19ujn/Lysq6anhKSEjIM04MuB4RnIBidO7cOTVs2ND8g7R8+XJNmjTJHBz9Zz179lT37t3l4+Nz1dCUmpqq999/35whvFq1avrggw/Uu3dvHTx4MN8BwQ6HQ8nJyXr55ZfNy/tnzJihZs2amafTGjVqpA4dOujjjz/+O2/7isLDw/X888/n25v266+/asWKFXrjjTcKte+DBw/K399flSpVMttsNpuCg4OVlpZmKTgVtY8++khOp1MPPvig9u/fr5UrV+rEiRN64okn9Morr8jX11eSCnSBwJ916tRJb7755mWnMXj//ffVv3//ywZhb29vTZw4Ud26ddOZM2fUt2/ffNd76KGH5O/vr7CwML333nsKDw/XhAkTJF3qjcrKyrpinRs3btS///1v628M8FAEJ6AYBQcHF2j9q12ZJF0KQJMmTdLo0aNdZoPu0qWLPvzwQ50+fdplVurU1FQNGDBA+/bt0yuvvKJ//OMfKlWqlNq3by+bzaZTp06pdOnSWrlypRo3biybzaZWrVpJknbt2qWgoCBLPQWGYVyx18EwDBmGIX9/f7Vv3141atTQkSNHXE5R5Xe7mJ9++klpaWkupyGXLl2qnj17av78+ercubPZvnjxYvn6+mro0KFm286dO1W+fPl8B3IXh8TERH388cdauXKlqlatqm7duql58+bKyclRv3791LNnTz3yyCMu22RkZOQ7B5MV1apVU05OjlJSUvLMy7Vjxw6lpKS4fD/y4+3trblz56px48aqUqVKvrPX5/b+2Ww2zZ49W3369DF7yRwOxxVDaUpKimw2m0JDQwv47gDPQ3ACriErY0GuJj4+XsOHD8/3D9X//ve/PIPK/fz81L17d3300UeqUKGC4uPjtXTpUu3cuVNnz55VkyZN9I9//ENVq1ZV//799dFHH2n8+PH6+OOPtXnzZj377LNXren8+fOaNm2atm7dqpUrV+a5Gi93udPp1NixYzV79myzbfv27Vq9erXq16+v//3vfy5XXiUkJOjIkSNKSEhw2Z/NZpO3t3ee01sjRozQvHnzNHnyZNlsNp0/f17p6elauHDhVd+DFVfrVZEuTRdx+vRpzZgxwzzdJV0KJ3+9b12uY8eO5TvA26oxY8YoOjra7AGSLk2LsGbNGo0ePdrSPsqXL6+JEydq4sSJLsEpJyfHJdyeOHFCixcv1tKlS822qKioK97SZcKECflOlQFcj2xGYUckAiiw3KkH8rtibv/+/dq8ebPuuOOOfLe95557tGXLlqu+RlZWlrp166YRI0aYPUd/du7cOT377LMaPny47rvvPkmXegxeeeUVvfDCC6pdu7aioqJUpkwZbd68WV9//XXB3mQJ1rBhQ+3du7fI9/vBBx/I6XTqxRdfLPQ+1q5dq1OnTql3796SpNjYWJfTc+np6crJydHNN9+sPn36aPTo0apTp47LPgzD0LJly1x6xL788ksdPnxYr7/+utLS0vTUU09p0qRJqlGjRr51/PXn9Msvv1RwcHCBZn8HPBk9TsA15HA4NHPmTN155515lvXq1UsXLlzId7tff/1V27dvV+vWrS2dzpMunfbKLzhVqFBBixYtMp/b7XaNGzdOI0aMMK/yioqK0qRJk7Ry5cp8TwHdiJxOp9LS0opkX4ZhaMGCBYqNjdW+ffv022+/6aeffvpb+wwPD9f27du1atUqtWvXLs+YpsTERC1dulQffPCBcnJy8kz9IF3qycvvNOLFixd16tQpjRgxQv/+97/zhKalS5cqNjZWXl5eys7ONttXr16t6tWrF3gaBMCT0eMEXENXCiEXLlwwBwr/VU5OjjZu3HjZS+H/jt27d6t27doqU6ZMnmVH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FaIo2Ww2eXl5KSMjQ1999ZViYmL0n//8R6VKldInn3yi//73v/L29taLL76olJQUbpZdQnDcb1xOp9M8a3D8+HFVrVpVvr6+mjVrlnr16qX+/furatWqWrhwoTp37uzmaq8PHnnLFRSP9PR0lStXzvzv09vbW2FhYTp58qROnjypSpUqqVWrVlqzZo0SExOVmZmpnj17urts/A3JycmaPn266tatq8cff1zfffedli1bpv3796tly5YaNWqUfvjhB9WpU0efffaZ1q5dq3vuuUcJCQk6ceKE/P39ZRgGf0ivQ2lpabr55pslSStXrtSSJUs47iVcfscsd8iFJG3btk3R0dFaunSpmjZtqkGDBqlVq1bXuszrHsHpBpCRkaHo6Gjdd9996tixo2w2m7y9vSVJVatW1eHDh+Xn56ewsDAFBgaqXLlyGjFihMaPH69KlSq5uXoUxuHDh7VgwQKtWLFCycnJGj58uBYtWqSZM2fqhRde0LRp03Ts2DGtWrVKs2fP1okTJ3T27FkNGjRIERERWrZsmZYuXar69evzB/Q689fP+//+9z/NnDlTQ4YM4biXcLnHy263KzAwUNKlsPTNN99o+/btKl26tCIiIhQZGam0tDTz9G16errOnj2ratWquav06wqn6kqQrKwsczxSYmKi+vbtq4sXL+rnn3/WoUOH1Lp1a3Pd48ePa/To0Xr88ce1cuVK/fLLLzp16pQkqX379qpYsaIqVarElXXXkeTkZH388ceKiIhQr169ZLPZNGPGDO3evVt9+/ZVt27d9O2338rX11ctW7bUsGHDtH79eo0ePVqffvqpoqKi1Lx5c02fPl2+vr7au3evJNf/WOE5rH7eH3vsMX333Xcc9xIud1zaJ598ohkzZigrK0uSNGPGDAUEBGjRokV67bXX1KRJE91yyy369ttvNWfOHEnSihUrFBERoR07drit/usJn4wSJDk5WWPHjlVSUpKCg4OVmpqqI0eO6ODBgxoyZIjKli2rM2fOaNeuXVq3bp3S09M1bdo0bdu2TbfddptOnjwpSbr33nt1/vx5nT59Wl5eXjIMQ1lZWcrIyHDzO8RfOZ1Off311+rXr586dOigPXv26Pnnn9fjjz+u4cOHq2bNmtq8ebO+++4787/RjIwM1apVS1999ZXmzJmjffv2af369frnP/+p5557TtHR0QoN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d23uLRiCgoI0ePBgc/uBAweqcuXKLvs0/v8rLJjXxfPkHpsGDRpo9+7dKl++vLKzs81j1b17d3Pd33//XSdOnDCvnqlUqZJCQkJ06NAh1apVS9KlObz+ilM1nsvq5z33pt2GYXDcr3M2m005OTny9vbWp59+qjJlyujnn3/We++9p507d6pFixbq16+fHn744Tzbbt26Vc2bNzdPzZ47d06lS5dW69at+f1eADbDYORfSbFq1SpFRUXp+eefV5cuXeTv7y/p0hiYWrVqqXXr1vLx8XFzlSgOcXFxeuedd9SxY0eFh4ebM75v3rxZ8+fP1549e1S7dm3Z7Xb17NlT3bp1kySXS5Bxffk7n3eO+/Vv165dWrJkiTZt2qTg4GA9+uijSkxMVOvWrdWoUSNJrv8kS5fGst58880qV66cO0u/7hGcShDjL3NvZGdnq1SpUlqyZIlOnjypJ598UhUqVHBjhShOgwYN0qBBg3TLLbfos88+0/r161WuXDl16tRJXbt2VVBQkOx2u5KSksyeBly/+LzfuNLS0hQREaHw8HD17t1bISEhki6F6WPHjumRRx7Jc+YARYdTdSVI7i9Rp9MpLy8v8350d955p86dO2cODkXJkvsHtH79+nriiSdUv3593XXXXfrwww9Vo0YNl/UCAgLMmYNxfePzfuO6+eabtXz5cvN57qm7unXratu2bTp37hzBqRjR4wSUEEeOHFHXrl21e/dul/bcX6oAShan0ymbzebS8/j555+rTZs23LC3GBGcbiB/7dpHyZF7bJcvX67WrVvL19c3zy9U3Fj4vAPFg+AEAABgEdcfAgAAWERwAgAAsIjgBAAAYBHBCQAAwCKCEwAAgEUEJwAAAIsITgAAABYRnAAAACwiOAEAAFhEcAIAALDo/wPX3zlBKjAR0AAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 600x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# === 6. 图表示例 1：区域 PM2.5 平均柱状 ===\n",
    "plt.figure(figsize=(6,4))\n",
    "# 修正中文显示\n",
    "plt.rcParams['font.sans-serif'] = ['AR PL UMing CN']\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "plt.bar(region_stats.index, region_stats.values, color='#4C72B0')\n",
    "plt.title('各区域 PM2.5 平均 (示例)')\n",
    "plt.ylabel('PM2.5 (μg/m³)')\n",
    "plt.xticks(rotation=20)\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "55480785",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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xaI13hw8p1QqcebMmQuu8+9//xsvvvgidu7c6XRn4fXXX8e9996L6Ohoh/Yff/wRDz74IN555x0AwPHjx5GcnIyff/4Zb731FkJDQzFixAgATX+YXUx9fT169OjhwZERXRhfeELkwh/+8AcsXboU/fr1c7l8y5Yt+M9//oP58+c7JGkA6N69O3r37m37fPXVV2P69OlYtmyZR30YP348Vq5cCaCpLOiSSy6xLVMoFNi8eTN2796N0aNHIykpCTNmzHCo/fWWi8XiQrp27Qqz2ezQVlFRgd/97nceb+vSSy+94NvA6uvrsXDhQmzYsMHl7f/s7GxMnz4du3fvdmgfPHgwunXrZvv8xRdfIDs7GzfeeCOqq6uxceNG2x9dZrP5osm6qqoKCQkJnhwa0QUxURO5MHLkSKxYsQL9+/d3WrZu3TqYzWb89a9/dXk79JtvvnFqazlIy11ZWVkoKChAaWmpw+1ooOmZeL9+/fDSSy9hx44d2LVrF8xmM1555RWP9uGOC8XiYsaMGYMNGzY4tK1bt87loLCLGT16tG3wlyu5ubl4+eWXbY8Hzte1a1e89tprePLJJy/4drIxY8agS5cuGDVqFB566CFUV1fbjv3s2bNOf3icr6SkBNdff70bR0TkHiZqCiqiKF7wiqj5ijQjIwNDhw61fUc8916gEydO4LfffsOtt97q8L0lS5agqqoK9fX1+POf/+x0Zbts2TKPk1PPnj2RkJCAN998E+np6Q7Ltm7dartVCzQloZSUFI9e9tHeWJy/rqur+ccffxzLli2zLSsvL0dNTY3HA8kA4MYbb8T+/ftd3t7//PPPccUVV+DGG2+84DYuueQSFBQU4IEHHsBPP/3kcp3mW+NdunTBggULHGrizWbzBWP866+/YsCAAQ53P4jai8+oKWgcOXIEH374IfR6Pe68806nUblHjhzBokWLcOzYMWRnZ2Px4sW279TU1GDs2LEoLi5GQUEB1q9fD6DpmeUvv/yCyy+/HI888giAplun//znP6FQKNDY2IiKigpMmDABN998s8d9fvDBB3Ho0CGn9okTJ+K9997Dc889B7VaDYPBgIaGBsydO7fTYjFgwAAYDAZs2rQJr732Gurq6pCQkICRI0ciJiYGAKBSqTBr1iw8/fTTtheevP766x7Hodkzzzxjuypu9sMPP+D48eN4+OGH3dpG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wK31jx075jB6PDo6GuHh4bZX/pWWll5w0JpCoYBC4TxBfEhISNCciDKZLKiO90IYCzvGwo6xsGMs7HwdC0/22+YevvXWW05tlZWVmDt3rtvPqkVRRGxsrEPb7NmzsWjRIixZsgTr16/HX//617Z2kYiIyO+1+Yp63759uOOOO9CzZ0/Mnz8fPXv2xNSpU/HKK69g2bJlmD179kW30XJu62ZKpRJz585ta7eIiIgCSpuvqH/66Se88MILePvtt7FmzRoATbNnXXrppRBF0WsdJCIiCmZtvqJOTk7G1VdfDQA4deoUAMBsNgNoevMYERERtV+bE7Uoiti3bx/effddHD9+HIsXL0Z9fT1OnDiB48ePe7OPREREQavNt75zc3Px2WefYdCgQfjwww8RExODL7/8EsuXL2/X60WJiIjIrs1X1NHR0cjNzbV9vuuuuwAA06dPb3+viIiICEA7rqiJiIio4zFRExERSRgTNRERkYS1OVGvXr0af/vb32ylWQCwdetWb/SJiIiIzmnzYDKtVovffvsNN954I4YMGYL09HQsXboUP/zwgzf7R0REFNTafEWtUCgwdepU7N+/H+PGjcOXX37p1oxZRERE5L42J2qj0Qiz2QyZTIZbb70Vn332GXbu3OnNvhEREQW9Nt/63rp1K5588klkZ2cjJSUFDQ0NOHr0qDf7RkREFPTafEU9ZswYfPvtt+jbty+Kiorw1ltvYe/evXjjjTdgMpm82UciIqKg1eYragDo06cPJkyYYPtcXV2N9957D3fccQdHgBMREXmBV+uolUolpk2bxiRNRETkJXzhCRERkYQxURMREUmYW4laEASPNmq1WtvUGSIiInLkVqLetGkTqqur3drg8ePH8cknn7SrU0RERNTErUSt1Wrx3nvvoaSk5ILrbdmyBZ988gnuu+8+r3SOiIgo2LldnjVt2jSsWLEC+fn5GDhwIK688kqo1WrU1NTg4MGD+Omnn3DTTTdhypQpHdlfIiKioOJRHfXEiRMxceJEfP/99zhw4AD27duH6OhoDB48GJMnT+6oPhIREQWtNr3wZMiQIRgyZIi3+0JERETnYXkWERGRhDFRExERSRgTNRERkYQxURMREUlYu2bPaq9ly5YhIiIC9fX1UKlUGD16NHJzc1FcXGxbZ/jw4Zg2bZoPe0lEROQ7PkvUH3zwAa677jr0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9+f777/HwIED270dTyxZsgSPPPKIW+uePn0a48ePv+Cz7DvuuAOffPKJt7pHJBm8oibysYaGBixcuBBTpkwBAGRkZGDr1q249dZb0fLJ1J///GeH71VWVkKpVEKhUABouqX+3XffobKyEvHx8XjyySfdftZ84MABXHnllRddb82aNbjpppvQo0cPnD17Fhs3bsSdd97psI5Op8PcuXMhk8mwd+9eJCUlISkpCY8++qhtncbGRnz//fd45plnbN/JysrCPffcg5UrV2LSpEn47rvvEBcXh1mzZuH+++/HBx98gAEDBrTatyuvvBL//ve/3TpeIn/CRE3kIxs3bkRoaCiMRiNycnLQr18//Pbbb0hJScGbb76JEydOICYmxuV39+/fj/fffx/5+fm2tjFjxiA2NhZA09XqvHnz3H5me/LkyQsmQaDpD4Mnn3wSBw4cAAC88cYbOHbsmFOiXrx4MR566CEMHDgQJSUlmDVrFl577TWHdVauXInx48fbPkdGRsJoNCI9PR0A8L///Q9vvPEGbr/9dgDA+++/jwkTJuDBBx9stX89e/ZEVVWVW8dL5E+YqIl8RKvVunyeGhISgq5du2LXrl22RNXS+vXrUVtbi7y8PIf25iQNAI888ghGjRrldl+io6NRU1NzwXX++9//4sEHH4RCoYAgCFiyZAm2bdvmtF6/fv3w3nvvYeHChUhOTkbPnj0dlouiiLVr1+Kzzz6ztSkUCqjVaiQnJ2P37t1ITEwEYH9EIIoi3nvvPfTt27fV/tXW1iI6OtrdQybyG0zURBI0dOhQfP/9906JetWqVejXr59T+8GDBxEfH49LLrnE1iaXy93eX1JSEnbt2gWtVtvqOocOHcK1114LANi8eTPS09NdXvFPmDAB69evx4svvoiePXti/vz5DsvXrl2L0aNHIyTE/SEyEydOvOg6hw4duuhdASJ/xMFkRD4giiJcVUY2t2dkZKBPnz4AAEEQADTd7u7WrZtD+dTGjRsBAB9++CF++OEHW3tFRQVUKpXb/bnuuuuwb9++C65TWFhoG7j25ptv2m5Tn2/VqlUYNmwYZs6ciYcfftgpmTffxva2jRs34t577/X6dol8jVfURJ3swIED+Pbbb/HWW29h5syZDsuWLFmCLl264O9//zuSk5OxYsUKfPfddygsLMRXX32FgwcP4uOPPwYAHD58GElJSdBqtcjJycGKFStw+PBhNDY24tChQ1iwYIHbfZLJZLjpppvw3//+FyNGjHBabjAYUFNTg40bN+Knn37C//3f/yEnJweJiYkYPny4w7rJycl46qmnkJ+fj9DQUCQmJmLRokXQaDTYvn07rr32WtsAuGZ6vR4VFRU4dOgQysrK0K1bNxw+fBgVFRXQ6/UXvaV97NgxWK1Wh9v/RIGCLzwhIpuFCxfinnvuQVxcnEP7P/7xD4SHh+Pxxx+/6Dbmz5+PiRMn2pLmkSNHsHz5csyePRvjx4/H4sWL0b17d6/1uaGhAfPnz8ff/vY3pz8AiAIBr6iJyObJJ5/EBx98gHvuuQehoaG29jVr1mDdunVubaNbt26YNm0aevfujcjISADA+PHjsX//fsTFxXk1SQPA6tWr8dRTTzFJU8DiFTUREZGEcTAZERGRhDFRExERSRgTNRERkYQxURMREUkYEzUREZGEMVETERFJGBM1ERGRhDFRExERSRgTNRERkYT9PwNgq3tSO2u/AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 500x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# === 7. 图表示例 2：PM25 vs PM10 散点 (示例) ===\n",
    "plt.figure(figsize=(5,4))\n",
    "plt.scatter(df['PM25'], df['PM10'], alpha=0.6, edgecolor='k', s=40)\n",
    "plt.title('PM25 vs PM10 (示例)')\n",
    "plt.xlabel('PM25 (μg/m³)')\n",
    "plt.ylabel('PM10 (μg/m³)')\n",
    "plt.grid(alpha=0.25)\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "27c7f11b",
   "metadata": {},
   "source": [
    "## 9. (可选) 简易模型 / 假设验证\n",
    "示例：利用上一日 PM25_lag1 预测今日 PM25，或建立高污染分类基线。仅在你时间允许时尝试。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "1f3fc76d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R^2: 0.9816988260300709\n"
     ]
    }
   ],
   "source": [
    "# === 8. (可选) 简单回归骨架 ===\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.linear_model import LinearRegression\n",
    "df = df.sort_values(['city','date'])\n",
    "df['PM25_lag1'] = df.groupby('city')['PM25'].shift(1)\n",
    "model_df = df.dropna(subset=['PM25_lag1'])\n",
    "X = model_df[['PM10','NO2','SO2','PM25_lag1']]\n",
    "y = model_df['PM25']\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=42)\n",
    "reg = LinearRegression().fit(X_train,y_train)\n",
    "print('R^2:', reg.score(X_test,y_test))\n",
    "# (本节可删除如果不做模型)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "47bdc8be",
   "metadata": {},
   "source": [
    "## 10. 结论 (请用要点列出)\n",
    "示例格式：\n",
    "1. 发现 1：描述 + 数据支撑 (引用统计或图)。\n",
    "2. 发现 2：……\n",
    "3. 发现 3：……\n",
    "4. 局限：时间范围短 / 指标简化 / 未考虑气象等外部因素。\n",
    "5. 改进方向：计划加入气象数据或更长时间序列。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e68ee455",
   "metadata": {},
   "source": [
    "## 11. 数据伦理与责任声明 (示例)\n",
    "本项目数据来自课程提供公开示例，已做教学简化；分析仅用于课堂学习，不代表真实长期趋势；未涉及个人隐私。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "83c8a61d",
   "metadata": {},
   "source": [
    "## 12. 附录 (可选)\n",
    "可放：\n",
    "- 自定义函数\n",
    "- 额外图表\n",
    "- 关键代码封装"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "40d7b419",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 示例：封装一个函数 (若使用)\n",
    "def region_pm25_mean(df, region_name):\n",
    "    return df[df['region']==region_name]['PM25'].mean()\n",
    "# region_pm25_mean(df, '华南')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a43e90d7",
   "metadata": {},
   "source": [
    "## 13. 反思（课堂/课后）\n",
    "请写 80~120 字：今天最困难的步骤是什么？你准备如何改进学习方式？"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "404b8077",
   "metadata": {},
   "source": [
    "## 14. 提交前自检 Checklist\n",
    "| 项 | 是否完成 |\n",
    "|----|----------|\n",
    "| 题目 + 摘要 |  |\n",
    "| 数据来源说明 |  |\n",
    "| 清洗步骤列出 |  |\n",
    "| 至少 1 表 1 图 |  |\n",
    "| 图表标题轴标签单位 |  |\n",
    "| 结论含 3 条发现 + 局限 |  |\n",
    "| 伦理声明 |  |\n",
    "| 运行无错误 (Kernel Restart + Run All) |  |\n",
    "| 代码有必要注释 |  |"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "14a98839",
   "metadata": {},
   "source": [
    "## 15. 评分 Rubric（参考）\n",
    "| 维度 | 权重 | 描述 |\n",
    "|------|------|------|\n",
    "| 完整性 | 25% | 步骤齐全、结构清晰 |\n",
    "| 正确性 | 25% | 代码运行无误，统计合理 |\n",
    "| 表达与可视化 | 20% | 图表规范、文字解读清晰 |\n",
    "| 分析深度 | 15% | 发现有价值，非堆砌数字 |\n",
    "| 规范与伦理 | 10% | 来源、局限、责任说明到位 |\n",
    "| 创意/拓展 | 5% | 函数封装 / 合理模型 / 新颖角度 |"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "51f1462f",
   "metadata": {},
   "source": [
    "---\n",
    "📌 提示：展示时重点讲“问题→方法→关键发现→局限与改进”，少念代码，多讲思路。祝顺利！"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8b119280",
   "metadata": {},
   "source": [
    "## 16. 小结\n",
    "综合实践关键心法：\n",
    "1. 明确且可回答的问题定义（量化范围 & 指标）。\n",
    "2. 每一步（清洗/派生/筛选）保持最小且可复现；必要注释说明“为什么”。\n",
    "3. 中途形成“中间成果”表或统计，降低返工成本。\n",
    "4. 图表严格服务结论：先写结论草稿，再决定画哪种图。\n",
    "5. 结论层次：现象→证据→解释→局限→改进方向。\n",
    "\n",
    "继续提升建议：扩大时间跨度 / 引入外部变量（气象、人口结构）/ 尝试指标标准化 / 尝试更多评估方式。\n",
    "学习路径延伸：可视化美化（seaborn/plotly）→ 更多数据整理 (pivot/时间序列 resample) → 模型评估与特征工程 → 自动化报告。\n",
    "祝贺完成 8 天入门强化：保持好奇与审慎，同步构建“代码片段 + 思考模板”个人知识库。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0fddcb49",
   "metadata": {},
   "source": [
    "### 项目扩展与质量提升清单\n",
    "1. 明确指标定义：在 Notebook 顶部集中列出所有自建指标公式。\n",
    "2. 数据字典：用 DataFrame(columns=['字段','含义','类型','备注']) 生成表格展示。\n",
    "3. 复现路径：在开头提供“运行步骤说明”1~5 条（读数据→清洗→分析）。\n",
    "4. 参数化：把阈值/选择列放在单独配置部分，便于调整。\n",
    "5. 函数化：重复出现的统计或图表封装函数 (如 plot_city_trend)。\n",
    "6. 结果导出：关键汇总 to_csv('summary.csv', index=False)。\n",
    "7. 图表文件保存：figure.savefig('./fig/pm25_trend.png', dpi=150)。\n",
    "8. 版本记录：在末尾列出“今日 vs 昨日”改动要点。\n",
    "9. 假设-验证矩阵：表格列出假设 / 使用方法 / 支撑与否 / 备注。\n",
    "10. 拓展方向：加入气象数据、加长时间窗口、做季节对比、尝试简单预测。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
